package main

import (
	"fmt"
	"go-xorm-01/utils"
	"time"
)

// 表操作 :https://xorm.io/zh/docs/chapter-03/2.tables/
// xorm 提供了一些动态获取和修改表结构的方法，通过这些方法可以动态同步数据库结构，导出数据库结构，导入数据库结构。
//
// 表操作
// CreateTables()
// 创建表使用 engine.CreateTables()，参数为一个或多个空的对应Struct的指针。同时可用的方法有 Charset() 和 StoreEngine()，如果对应的数据库支持，这两个方法可以在创建表时指定表的字符编码和使用的引擎。Charset() 和 StoreEngine() 当前仅支持 Mysql 数据库。
//
// IsTableEmpty()
// 判断表是否为空，参数和 CreateTables 相同
//
// IsTableExist()
// 判断表是否存在
//
// DropTables()
// 删除表使用 engine.DropTables()，参数为一个或多个空的对应Struct的指针或者表的名字。
// 如果为string传入，则只删除对应的表，如果传入的为Struct，则删除表的同时还会删除对应的索引。
func main() {
	engine := utils.GenerateEngine()
	defer engine.Close()

	empty, err := engine.IsTableEmpty(&UserHandle{})
	if err != nil {
		err := engine.CreateTables(&UserHandle{})
		engine.Charset("utf8mb4")
		engine.StoreEngine("InnoDB")
		if err != nil {
			fmt.Println("create table err =", err)
		}
	}
	fmt.Println("empty =", empty)

	empty, err = engine.IsTableEmpty(&UserHandle{})
	if err != nil {
		fmt.Println("IsTableEmpty err =", err)
	}
	fmt.Println("empty =", empty)
	if empty {
		engine.DropTables(&UserHandle{})
	}

}

// UserHandle
// @Description: UserHandle
type UserHandle struct {
	Id            int64 `xorm:"id"` //指定列名 ，默认id
	Username      string
	Password      string
	RegisterTime  time.Time
	LastLoginTime time.Time
}

// TableName
//
//	@Description: 指定表名：默认为:user_handle
//	@receiver u
//	@return string
func (u UserHandle) TableName() string {
	return "user_handle"
}
